import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 专门提供数据源的地方
  state: {
    count: 0
  },
  // 如果相对数据源进行修改只能在这里
  mutations: {
    SubFun(state) {
      state.count -= 1
    },
    addFun(state) {
      state.count += 1
    },
    addFunMore(state, n) {
      state.count += n
    },
    subFunMore(state, n) {
      state.count -= n
    }
  },
  // 异步操作，但是不能直接访问state中的值，需要mutation
  actions: {
    addAsync(context) {
      setTimeout(() => {
        context.commit('addFun')
      }, 1000)
    },
    subAsync(context) {
      setTimeout(() => {
        context.commit('SubFun')
      }, 1000)
    },
    addAMore(context, n) {
      setTimeout(() => {
        context.commit('addFunMore', n)
      }, 1000)
    },
    subAMore(context, n) {
      setTimeout(() => {
        context.commit('subFunMore', n)
      }, 1000)
    }
  },
  // 对数据修改产生一个新数据，不会对原来的数据产生影响
  getters: {
    setNum(state) {
      return state.count === 0 ? '我是鸭蛋' : '你才是'
    }
  }
})
